import type { RouteRecordRaw } from 'vue-router';

/** 方法1
* @return { loadLocalRouter : <Array>}  
* 获取本地定义好的全部路由
**/ 
export function loadLocalRouter() {
        // 1 创建一个空的路由数组
        const localRouter: RouteRecordRaw[] = []
        // 2 读取router文件夹下的main文件夹下的所有 子目录 下的所有ts文件 
        //import.meta.glob 引入文件  eager:true 表示立即执行
        const files: Record<string, any> = import.meta.glob('@/router/main/**/*.ts', { eager: true })
        for (const key in files) {
            // 3 获取文件内容
            const route = files[key].default
            // 4 将文件内容添加到localRouter中
            localRouter.push(route)
        }
        return localRouter
}
export function mapMenusToRoutes(userMenus: any[]): RouteRecordRaw[] {
        // 1. 加载本地路由
        const localRouter = loadLocalRouter()
        // 2. 根据用户菜单获取需要添加的动态路由
        const realRouter: RouteRecordRaw[] = []
        for(const menu of userMenus){
            for(const subMenu of menu.children){
                const route = localRouter.find(item => item.path == subMenu.url)
                if(route){
                    realRouter.push(route)
                }
            }
        }
        
        return realRouter
}



/** 方法2 推荐
 * @param { userMenus : <Array>}  后端获取的当前身份用户菜单
 * @param { localRouter : RouteRecordRaw[]}  本地定义好的全部路由
 * @return { realRouter : RouteRecordRaw[]}  根据用户菜单获取需要添加的动态路由
 * 递归找出用户菜单中对应的本地路由
 * **/ 
export function mapMenusToRoutes3(userMenus: any[], localRouter: RouteRecordRaw[]): RouteRecordRaw[] {
    const realRouter: RouteRecordRaw[] = [];
    localRouter.forEach(item => {
            userMenus.forEach(menu => {
                if (item.meta?.title == menu.name) {
                    if (item.children && item.children.length > 0) {                       
                        mapMenusToRoutes3(menu.children,item.children)
                    }
                    realRouter.push(item)
                }
            })
        })
    return realRouter;
}
/**
 * @param { realRouter : <Array>}  根据用户菜单获取的需要添加的动态路由
 * 设置点击下拉菜单时 将路由重定向到当前菜单的 第一个 子路由
**/ 
export function mapMenusToFirstPath(realRouter: RouteRecordRaw[]) {
    realRouter.forEach(item => {
        if (item.children && item.children.length > 0) {
            item.redirect = {name: item.children[0].name}
            mapMenusToFirstPath(item.children)
        }
    })
}


/**
 * 根据页面路由匹配，选中的菜单
 * 
 * @pathName 当前页面路由的名字
 * @menuList 当前用户菜单
 * @return {menu: any}  查找到的菜单
 * **/ 
export function mapPathToMenu(pathName: string,menuList: any[]) {
    for (const menu of menuList) {
        if (menu.routeName == pathName) {
            return menu
        } else if (menu.children) {
            const findMenu:any = mapPathToMenu(pathName, menu.children)
            if (findMenu) {
                return findMenu
            }
        }
    }
}
